{
Miranda IM: the free IM client for Microsoft* Windows*

Copyright 2000-2006 Miranda ICQ/IM project, 
all portions of this codebase are copyrighted to the people 
listed in contributors.txt.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
}

{$IFNDEF M_USERINFOEX}
{$DEFINE M_USERINFOEX}

{*************************************************************
 *  Interfaces Module
}

const MIID_UIUSERINFOEX:MUUID='{9C23A24B-E6AA-43c6-B0B8-D6C36D2F7B57}';
const MIID_CONTACTINFO :MUUID='{17DBD7C9-450E-4000-BFB4-908A7EF4CE72}';
const MIID_REMINDER    :MUUID='{02E890BD-278D-4890-918D-AB2CF5DC50BD}';

{*************************************************************
 *  PropertySheetPage Module
}

{ UserInfo/AddPage        v0.1.0.0+
If the hIcon member of te optiondialogpage is valid, the tree show it for nicer look.
Otherwise the default icon is displayed for this treeitem.
}
const
//  ODPF_UNICODE = 8; // string fields in OPTIONSDIALOGPAGE are WCHAR*
  ODPF_ICON = 64; // the hIcon member of the option dialog page is valid

{ Handling notifications    v0.1.0.4+
A dialogbox should call SetWindowLongPtr(hDlg, DWL_MSGRESULT, PSP_CHANGED) on a PSN_INFOCHANGED notification if
there are unsafed changes and apply button should keep enabled. Otherwise the changed status
of the dialogbox is resetted as well as the changed status of the details dialog box itself if no page
called this message. Because UserinfoEx now looks for changes in the settings of a user to keep the 
shown inforamtion up to date.
}
  PSP_CHANGED     = 2;
  PSN_ICONCHANGED = 2;

{ PSM_GETBOLDFONT v0.1.0.3+
wParam=NULL
lParam=(HFONT*)&hFont
get bold dialog font. wParam is pointer to a handle that retrieves the boldfont.
You can also call GetWindowLong(hDlg, DWL_MSGRESULT) to get the font.
This function returns TRUE on success or FALSE otherwise.
}
//!!  PSM_GETBOLDFONT = WM_USER+102; //defined in m_options.inc

{ PSM_ISLOCKED v0.1.0.4+
Returns state of propertysheet. If it is locked, The PSM_CHANGED messages sent by a propertysheetpage does not
have any effect. To aVOID editcontrols, ... to check for changes on redrawing at a load of settings from database or
if another propertysheetpage is selected, a plugin should check this state and skip those checks to reduce stressing
the database if such a test if control's content changed does so.
wParam=NULL
lParam=NULL
You can also call GetWindowLong(hDlg, DWL_MSGRESULT) to get the handle.
This function returns TRUE if the PropertySheet is locked or FALSE otherwise.

Example:
__inline BOOLEAN PspIsLocked(HWND hPsp)

  HWND hPs = GetParent(hPsp);
  return ((BOOLEAN)SendMessage((hPs), PSM_ISLOCKED, 0, 0) || GetWindowLongPtr((hPs), DWL_MSGRESULT) != 0);
}
  PSM_ISLOCKED = WM_USER+901;

{ PSM_GETCONTACT v0.1.0.4+
You can get the handle to the contact the propertysheet is associated with by calling PSM_GETCONTACT
to the parent of your propertysheetpage - the propertysheet.
wParam=NULL
lParam=(HANDLE*)&hContact
You can also call GetWindowLong(hDlg, DWL_MSGRESULT) to get the handle.
This function returns TRUE on success or FALSE otherwise.
}
  PSM_GETCONTACT = WM_USER+903;

{ PSM_GETBASEPROTO v0.1.0.4+
You can get a pointer to the basic protocol module by sending PSM_GETBASEPROTO to the parent of your propertysheetpage.
wParam=NULL
lParam=(LPCSTR*)&szBaseProto
The propertysheet loads the basic contact protocol on creation for a better handling
of owners (ICQ) protocol used for changing details on the server. Should also reduce database traffic.
You can also call GetWindowLong(hDlg, DWL_MSGRESULT) to get the protocol.
This function returns TRUE on success or FALSE otherwise.
}
  PSM_GETBASEPROTO = WM_USER+905;

  INDEX_CURPAGE = -1;

{ PSM_GETPAGEHWND  v0.1.1.1+
retrieve the windowhandle for a propertysheetpage identified by its id
wParam=idDlg
lParam=hInstance
}
  PSM_GETPAGEHWND = WM_USER+906;

{ PSM_DLGMESSAGE  v0.1.1.1+
Send a message to a specified propertypage of the details dialog.
This enables communication between propertypages without the need to know
the window handles of each page.
}
type
  PDLGCOMMAND = ^TDLGCOMMAND;
  TDLGCOMMAND = record
    hInst    :HINST;
    idDlg    :word;
    idDlgItem:word;
    uMsg     :uint;
    wParam   :WPARAM;
    lParam   :LPARAM;
  end;

const
  PSM_DLGMESSAGE = WM_USER+907;

{*************************************************************
 *  vCard Module
}

// UserInfo/vCardExport  v0.1.0.4+

  MS_USERINFO_VCARD_IMPORT:PAnsiChar = 'UserInfo/vCard/Import';

  MS_USERINFO_VCARD_IMPORTALL:PAnsiChar = 'UserInfo/vCard/ImportAll';

// UserInfo/vCardImport  v0.1.0.4+

  MS_USERINFO_VCARD_EXPORT:PAnsiChar = 'UserInfo/vCard/Export';

// UserInfo/vCardImport  v0.1.0.4+

  MS_USERINFO_VCARD_EXPORTALL:PAnsiChar = 'UserInfo/vCard/ExportAll';

{*************************************************************
 *  time Module
}

{ UserInfo/LocalTime  v0.1.0.3+
Computes the local time for the desired contact and writes it to lpst.
wParam=(WPARAM)hContact
lParam=(LPSYSTEMTIME)lpst
The service gets your windows box's local time, reads your timezoneinformation (Windows setting)
and hContact's timezone from his user details. With these information contact's local time is computed
considering daylightsaving time.
Return values are TRUE for success and FALSE if anything went wrong.
}
  MS_USERINFO_LOCALTIME:PAnsiChar = 'UserInfo/LocalTime';

{*************************************************************
 *  Reminder module
}

{ UserInfo/Reminder/Check  v0.1.0.4+
This service checks if one of your contacts has birthday in the next few days
wParam = lParam = not used
}
  MS_USERINFO_REMINDER_CHECK:PAnsiChar = 'UserInfo/Reminder/Check';

{ UserInfo/Reminder/Check  v0.1.1.1+
This service creates a dialog, that lists all of the anniversaries
wParam = lParam = not used
}
  MS_USERINFO_REMINDER_LIST:PAnsiChar = 'UserInfo/Reminder/List';


{ UserInfo/Reminder/Check  v0.1.2.16+
This service compares birthday date which is set by the protocol module of each contact
to the first found custom set birthday date. If a difference is detected, the user is asked
whether to update the custom set birthday by the one of the protocol or not. 

If no custom birthday is set yet and the protocol contains a valid birthday, it is copied to
primary custom module (e.g.: mBirthday or UserInfo).
wParam = handle to single contact or NULL to backup all
lParam = not used
}
  MS_USERINFO_REMINDER_AGGRASIVEBACKUP:PAnsiChar = 'UserInfo/Reminder/AggrassiveBackup';

{*************************************************************
 *  Uinfobuttonclass module
}
 
// button styles
  MBS_DEFBUTTON  = $00001000; // default button
  MBS_PUSHBUTTON = $00002000; // toggle button
  MBS_FLAT       = $00004000; // flat button
  MBS_DOWNARROW  = $00008000; // has arrow on the right

  MBF_UNICODE = 1;

// BUTTONADDTOOLTIP
// use lParam=MBF_UNICODE to set unicode tooltips
// for lParam=0 the string is interpreted as ansi

// message to explicitly translate the buttons text,
// as it is not done by default translation routine
// wParam=lParam=NULL
  BUTTONTRANSLATE = WM_USER+6;

{ UserInfo/MsgBox  v0.1.0.4+
Slightly modified version of MButtonClass, to draw both text and icon in a button control
}
  UINFOBUTTONCLASS = 'UInfoButtonClass';

{*************************************************************
 *  Messagebox module
}

{ UserInfo/MsgBox  v0.1.0.3+
Some little changed message box for nicer look of miranda's messages or questions :-)
wParam=hContact      - can be null
lParam=(TMsgBox*)pMsg  - structure that holds information about the look of the message dialog
uType member of TMsgBox can be a combination of the following values, where most of them are defined in winuser.h:
MB_OK
MB_OKCANCEL
MB_YESALLNO
MB_YESNO
For valid icon values use one of the following MB_ICON_...
Funktion returns: IDOK, IDYES, IDALL, IDNO or IDCANCEL
}
  MB_YESALLNO = $00000007;
  MB_UNICODE  = $10000000;

{
valid predefined icon values
}
  MB_ICON_NONE     = $00000000;
  MB_ICON_ERROR    = $00000010;
  MB_ICON_QUESTION = $00000020;
  MB_ICON_WARNING  = $00000030;
  MB_ICON_INFO     = $00000040;
  MB_ICON_OTHER    = $000000F0; // use icon TMsgBox->hiMsg

type
  PMsgBox = ^TMsgBox;
  TMsgBox = record
    uSize     :uint;  // size of this structure
    uType     :uint;  // parameters
    hiLogo    :HICON; // right upper icon of the info bar
    hiMsg     :HICON; // icon left next to the message text
    szTitle   :TCHAR; // dialog window title text
    szInfoText:TCHAR; // text of the infobar on the top of the dialog
    szMsg     :TCHAR; // the message text
    hParent   :hwnd;  // parent window for the messagebox
  end;

const
  MS_MSGBOX:PAnsiChar = 'UserInfo/MsgBox';

{*************************************************************
 *  contact info module
}

// additional information which can be retrieved with this service
  CNF_COPHONE    = 39; // returns company phone (string)
  CNF_COFAX      = 40; // returns company fax (string)
  CNF_COCELLULAR = 41; // returns company cellular (string)
  CNF_COEMAIL    = 42; // returns company email address (string)

{ CNF_BIRTHDATE  v0.1.2.18+
returns a formated string with the birthdate in it
wParam - 1 for long dateformat, 0 for short dateformat
lParam - CONTACTINFO structure as for all other fields, too
returns 0 on success and 1 on failure
}
  CNF_BIRTHDATE = 43; // returns date of birth (string)  

{*************************************************************
 *  extended integration module
}

{ UserInfo/Homepage/OpenURL  v0.1.2.19+
This service reads the contact's homepage from UserInfo module or contact's protocol module
and opens the default browser to show it.
wParam=hContact  - handle to contact whose homepage is to show
lParam=not used
}
  MS_USERINFO_HOMEPAGE_OPENURL:PAnsiChar = 'UserInfo/Homepage/OpenURL';

{$ENDIF}
